<?php
/*
 * Table/SiteHoraireTable
 * Classe manipulant la Table Site
 */

namespace RHX\Model\Table;

use RHX\Model\Object\Site;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use RHX\Model\Object\SiteHoraire;
use RHX\Model\Object\SiteHoraireType;
use Zend\Db\Sql\Select;
use  Zend\Db\Sql\Where;

class SiteHoraireTable extends AbstractTableGateway {

    /**
     * Nom de la Table
     *
     * @var string Nom de la Table
     */
    protected $table = 'rh_site_horaire';

    /**
     * Constructeur
     *
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new SiteHoraire());
            $this->initialize();
    }

    /**
     * Récupérer tous les horaires de la Table
     *
     * @param string $order Ordre d'affichage
     * @return Collection
     */
    public function getAll($order = 'id ASC') {
	return $this->select(function(Select $select) use($order) {
			    $select->order($order);
			});
    }

    /**
     * Récupérer les Sites par Page
     * @param int $idSite ID d'un site existant
     * @param int $type Type d'horaire
     * @return Collection
     */
    public function getBySite($idSite, $type = SiteHoraireType::Normal) {
	$row = $this->select(function(Select $select)use($idSite, $type){
	    $where = new Where();
	    $where->equalTo('type', $type);
	    $where->equalTo('site_id', $idSite);
	    $select->where($where);
	    //echo '<pre>' .@$select->getSqlString() .'</pre>';
	})->current();
//	if(!$row){
//	    \Zend\Debug\Debug::dump($idSite, "Id du Site");
//	    \Zend\Debug\Debug::dump($type, "Type d'horaire");
//	    \Zend\Debug\Debug::dump($row, "Valeur de retour");
//	    throw new \Exception("Horaire introuvable");
//	}
	return $row;
    }

    public function executeQuery($sql) {
	return $this->adapter
			->query($sql)
			->execute();
    }
    
    /**
     * Récupérer un SiteHoraire
     *
     * @param strng $id
     * @return RHX\Model\Object\SiteHoraire
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row)
	    throw new \Exception("Erreur 21 : Le SiteHoraire #$id n'a pas été trouvé");

	return $row;
    }
    
    /**
     * Sauvegarder dans la base de données d'un site horaire
     * Creation d'un horaire pour un site ou MAJ d'un autre existant
     *
     * @param \RHX\Model\Object\SiteHoraire $horaire Objet à sauvegarder
     * @return int L'identifiant de l'objet sauvegarder dans la base de données
     * @throws \Exception
     */
    public function save(SiteHoraire $horaire) {
        $aFieldHor = array( 'site_id', 'type',
                            'lundi', 'lundi_ouverture',  'lundi_fermeture',                             
                            'mardi', 'mardi_ouverture',  'mardi_fermeture',   
                            'mercredi', 'mercredi_ouverture',  'mercredi_fermeture',   
                            'jeudi', 'jeudi_ouverture',  'jeudi_fermeture',   
                            'vendredi', 'vendredi_ouverture',  'vendredi_fermeture',   
                            'samedi', 'samedi_ouverture',  'samedi_fermeture',
                            'dimanche', 'dimanche_ouverture',  'dimanche_fermeture'   
                        ) ;
        
        $data	 = array();
        foreach($aFieldHor as $k => $v){
            $data[$v] = $horaire->$v;
        }
        
	$id	 = (int) $horaire->id;
	if ($id == 0) {
	    $this->insert($data);
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));
	}
	else {
	    throw new \Exception("Erreur 22 : Le SiteHoraire #$id n'a pas été sélectionné");
	}
	if ($id < 0){
	    return $this->getLastInsertValue();
	}
	else{
	    return $id;
	}
     }
    
}

?>
